#include "HMC5883.H"
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include "simI2c.h"
#include "usart.h"
#include "delay.h"
/*需要配置的寄存器：1.测量模式 2.测量ID验证*/
void HMC5883_Init(void)
{
    uint8_t id = 0; // 存储读取的ID
    id = I2c_ReadByte(HMC5883_ID_A); // 读取ID寄存器A
    if (id != 0x48) 
    {
        printf("HMC5883 Not Found\r\n");
        printf("ID: 0x%02X\r\n", id); // 打印读取的ID
        return; // ID不匹配，返回
    }
    printf("HMC5883 Found!\r\n");
    uint8_t mode = HMC5883_MODE_CONTINUOUS; // Continuous mode
    I2c_WriteByte(HMC5883_MODE, mode); // 写入测量模式寄存器
    delay_ms(10); // 等待配置完成
    printf("HMC5883 Initialized\r\n");
}
/*读取HMC5883数据函数*/
void HMC5883_ReadData(int *data)
{
    uint8_t buffer[6]; // 存储读取数据的数组
    I2c_ReadBytes(HMC5883_DATA_X_MSB, buffer, 6); // 读取6字节数据
    // 将读取的数据转换为整数
    data[0] = (int16_t)((buffer[0] << 8) | buffer[1]); // X轴数据
    data[1] = (int16_t)((buffer[4] << 8) | buffer[5]); // Y轴数据
    data[2] = (int16_t)((buffer[2] << 8) | buffer[3]); // Z轴数据
    // // 打印读取的数据
    // char msg[50];
    // snprintf(msg, sizeof(msg), "X: %d, Y: %d, Z: %d\r\n", data[0], data[1], data[2]);
    // HAL_UART_Transmit(&huart2, (uint8_t *)msg, strlen(msg), HAL_MAX_DELAY);
}
